#include<bits/stdc++.h>
using namespace std;
typedef long long van;
template<typename T> inline
void read(T& x) {
    T f = 1, b = 0; char ch = getchar();
    while (!isdigit(ch)) {
        if (ch == '-') f = -1;
        ch = getchar();
    } while (isdigit(ch))
        b *= 10, b += ch - '0', ch = getchar();
    x = f * b; return;
}
template<typename T> inline
void print(T x) {
    if (x == 0) return putchar('0'), void();
    if (x < 0) putchar('-'), x = -x;
    int st[129] = {0}, k = 0;
    while (x) st[++k] = x % 10, x /= 10;
    for (int i = k; i; i--) putchar(st[i] + '0');
} const van MaxN = 2e5 + 10;
const van mod = 998244353;
vector<van> g[MaxN];
van n, k; bool used[MaxN];
van fa[MaxN];
van jc[MaxN], jcinv[MaxN];
void DFS(van now = 1) {
    used[now] = 1;
    for (int i = 0; i < g[now].size(); i++) {
        van nxt = g[now][i];
        if (used[nxt]) continue;
        fa[nxt] = now;
        DFS(nxt);
    } used[now] = 0;
}
van power(van a, van b) {
    van ans = 1, base = a;
    while (b) {
        if (b & 1) ans *= base, ans %= mod;
        base *= base, base %= mod; b >>= 1;
    } return ans;
}
van C(van a, van b) {
    return jc[a] * jcinv[a - b] % mod * jcinv[b] % mod;
}
int main() {
    freopen("soft.in", "r", stdin);
    freopen("soft.out", "w", stdout);
    read(n); read(k); bool subtask = true;
    for (int i = 1; i < n; i++) {
        van a, b; read(a), read(b);
        if (abs(a - b) > 1) subtask = false;
        g[a].push_back(b);
        g[b].push_back(a);
    } DFS(); jc[0] = 1;
    for (int i = 1; i <= n; i++) jc[i] = jc[i - 1] * i % mod;
    for (int i = 0; i <= n; i++) jcinv[i] = power(jc[i], mod - 2);
    if (subtask) {
        for (int i = 1; i <= k; i++) {
            print(C(n - 1, i - 1)), putchar('\n');
        }
        return 0;
    }
    for (int i = 1; i <= n; i++) {

    }
}